package channels

import "fmt"

/**
	* 如果发送者知道，没有更多的值需要发送到channel的话，那么让接收者也能及时知道没有多余的值可接收将是有用的，
	因为接收者可以停止不必要的接收等待。这可以通过内置的close函数来关闭channel实现;

	* channel关闭后不能发但能继续收
 */
func main() {
	c := make(chan int)

	go func() {
		for i := 0; i < 5; i++ {
			c <- i
		}
		//把 close(c) 注释掉，程序会一直阻塞在 if data, ok := <-c; ok 那一行
		close(c)
	}()

	for {
		//ok为true说明channel没有关闭，为false说明管道已经关闭
		if data, ok := <-c; ok {
			fmt.Println(data)
		} else {
			break
		}
	}

	fmt.Println("Finished")
}
